package practice1_100;

import java.util.Arrays;

public class Practice1738 {

    public int kthLargestValue(int[][] matrix, int k) {
        int column=matrix[0].length,row=matrix.length;
        int[] result=new int[column*row];
        int[][] res=new int[row][column];
        res[0][0]=matrix[0][0];
        for(int i=1;i<row;i++){
            res[i][0]=res[i-1][0]^matrix[i][0];
        }
        for(int i=1;i<column;i++){
            res[0][i]=res[0][i-1]^matrix[0][i];
        }
        for(int i=1;i<row;i++){
            for(int j=1;j<column;j++){
                res[i][j]=res[i-1][j]^res[i][j-1]^res[i-1][j-1]^matrix[i][j];//这个关系很重要，看出来了这题就好做了属于动态规划
            }
        }

        for(int i=0,m=0;i<row;i++){
            for(int j=0;j<column;j++){
                result[m]=res[i][j];
                m++;
            }
        }

        Arrays.sort(result);
        return result[column*row-k];
    }

    public static void main(String[] args) {
        int a=new Practice1738().kthLargestValue(new int[][]{{5,2},{1,6}},1);
        System.out.println(a);
    }
}
